__kernel void matrix_cho1(__global float * a, int indice, int taille_bloc, int n) {
  int x = get_global_id(0); //identifiant ligne
  int y = get_global_id(1);  //identifiant colonne
  
  int i;
  for(i=taille_bloc*indice ; i<taille_bloc*(indice+1) ; i++)
    {
      if (x==i && y==i)
	{
	  a[x*n+y] = sqrt(a[x*n+y]);
	}
      barrier(CLK_GLOBAL_MEM_FENCE);
      if(y==i && x>i)
	{
	  a[x*n+y] /= a[i*n+i];
	}
      barrier(CLK_GLOBAL_MEM_FENCE);
      if(x>i && y>i && y<=x)
	{
	  a[x*n+y] = a[x*n+y] - a[y*n+i]*a[x*n+i]; 
	}
      barrier(CLK_GLOBAL_MEM_FENCE);
    }
}


__kernel void matrix_cho2(__global float * a, int indice, int taille_bloc, int n)
{
  int x = get_global_id(0);
  int y = get_global_id(1);
  int start = taille_bloc*indice;
  if(x>=start && x<start+taille_bloc){
    if(y<=x){
      a[x*n+y] /= a[x*n+x]; 
    }
  }
}
